
#ifndef GRAPHICS_CONFIGURATION_HPP_
# define GRAPHICS_CONFIGURATION_HPP_

# include <string>

namespace	Graphics
{
	extern int unsigned const				DefaultWidth;
	extern int unsigned const				DefaultHeight;
	extern int unsigned const				DefaultColor;
	extern std::string const				DefaultTitle;
	extern std::string const				DefaultIcon;
	extern bool const						DefaultWindowed;
	extern bool const						DefaultVSync;
	extern int unsigned const				DefaultFrameRate;


	class	Configuration
	{
		public:
			Configuration(int unsigned = DefaultWidth, int unsigned = DefaultHeight, int unsigned = DefaultColor,
						  std::string const & = DefaultTitle, bool = DefaultWindowed);
			Configuration(Configuration const &);

			Configuration const	&operator=(Configuration const &);

			int unsigned		getWidth() const throw();
			int unsigned		getHeight() const throw();
			int unsigned		getColor() const throw();
			std::string const	&getTitle() const throw();
			std::string const	&getIcon() const throw();
			bool				getWindowed() const throw();
			bool				getVSync() const throw();
			int unsigned		getFrameRate() const throw();

			void				setWidth(int unsigned);
			void				setHeight(int unsigned);
			void				setSize(int unsigned, int unsigned);
			void				setColor(int unsigned);
			void				setTitle(std::string const &);
			void				setIcon(std::string const &);
			void				setWindowed(bool);
			void				setVSync(bool);
			void				setFrameRate(int unsigned);

			~Configuration() throw();


		private:
			int unsigned		_width, _height, _color;
			std::string			_title, _icon;
			bool				_type, _vSync;
			int unsigned		_frameRate;
	};
}

#endif // GRAPHICS_CONFIGURATION_HPP_
